package io.github.mymonstercat.tools.text;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author wry
 */
public class JsonBottomLevelElementExtractor {

    public static List<String> extractBottomLevelElementsFromJson(String json) {
        JSONObject jsonObject = JSON.parseObject(json);
        List<String> result = new ArrayList<>();
        recursivelyExtractBottomLevelElements(jsonObject, result);
        return result;
    }

    private static void recursivelyExtractBottomLevelElements(Object jsonElement, List<String> elements) {
        if (jsonElement instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) jsonElement;
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
                recursivelyExtractBottomLevelElements(entry.getValue(), elements);
            }
        } else if (jsonElement instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) jsonElement;
            for (Object element : jsonArray) {
                recursivelyExtractBottomLevelElements(element, elements);
            }
        } else {
            elements.add(TextPostProcessor.clean(jsonElement.toString()));
        }
    }
}
